<?php
class Uploadinvoice extends CI_Controller {

	function __construct()
	{
		parent::__construct();
		$this->load->helper(array('form', 'url'));
	}
	//visar view för att ladda upp filer.
	function index()
	{
		//Kontrollerar att det är en administartör annars visas 404fel
		if($this->session->userdata('admin'))
		{		
			$this->load->view('global/view_master_header');
			$this->load->view('admin/view_admin_menu');
			$this->load->view('admin/view_payed_invoice_upload', array('error' => ' ' ));
			$this->load->view('global/view_master_footer');
		}
		else
		{
			show_404();
		}
	}
	
	//laddar upp filen
	function do_upload()
	{
		$config['upload_path'] = 'C:/Server/wamp/www/studentbilar/payed_invoices/';
		$config['allowed_types'] = 'txt';
		$config['max_size']	= '100';
		$config['max_width']  = '1024';
		$config['max_height']  = '768';

		$this->load->library('upload', $config);

		if ( ! $this->upload->do_upload())
		{
			$error = array('error' => $this->upload->display_errors());

			$this->load->view('global/view_master_header');
			$this->load->view('admin/view_admin_menu');
			$this->load->view('admin/view_payed_invoice_upload', $error);
			$this->load->view('global/view_master_footer');
		}
		else
		{
			$data = array('upload_data' => $this->upload->data());
			$data['info']=$this->_PayedInvoices($data['upload_data']['full_path']);
			$this->load->view('global/view_master_header');
			$this->load->view('admin/view_admin_menu');
			$this->load->view('admin/view_payed_invoice_success', $data);
			$this->load->view('global/view_master_footer');
		}
	}
	
	private function _PayedInvoices($fullPath)
	{
		$file=fopen($fullPath,'r')or die('det gick inte att öppna filen');
		$data=array();
		
		while(!feof($file))
		{	
			$instring=fgets($file);
			$in=array('trans'=>substr($instring,0,2),
					'data'=>substr($instring,2,strlen($instring)));
			array_push($data,$in);	
		}
		
		$priceOcrArray=$this->_checkIfOcrAndPrice($data);
		
		
		$this->load->model('admin_payed_invoice');
		
		//Meddelande som skickas till view.
		$message="";
		//Data som skickas tillbaka till användaren.
		$data=array();
		//kollar om fakturan finns i databasen.
		$ocrInDatabase=array();
		$ocrNotInDatabase=array();
		
		foreach($priceOcrArray as $ocrPricearray)
		{
			$result=$this->admin_payed_invoice->CheckIfOcrExists($ocrPricearray['ocrNumber']);
			if($result==TRUE)
			{
				array_push($ocrInDatabase,$ocrPricearray);
			
			}
			else
			{
				array_push($ocrNotInDatabase,$ocrPricearray);
			}
			
		}
		$data['ocrInDatabase']=$ocrInDatabase;
		$data['ocrNotInDatabase']=$ocrNotInDatabase;
		
		//Kollar så att det finns några fakturor som finns i databasen
		if(!empty($ocrInDatabase))
		{
			//Kollar om priset finns i databasen för faktura som finns 
			$priceInDatabase=array();
			$priceNotInDatabase=array();
			
			foreach($ocrInDatabase as $row)
			{
				$result=$this->admin_payed_invoice->CheckIfPriceIsRight($row['ocrNumber'],$row['amount']);
				if($result==TRUE)
				{
					array_push($priceInDatabase,$row);
				}
				else
				{
					array_push($priceNotInDatabase,$row);
				}
			}
			$data['priceInDatabase']=$priceInDatabase;
			$data['priceNotInDatabase']=$priceNotInDatabase;
			
			//Kollar om det finns någon faktura att bocka av finns det ingen skickas ett meddelande till användaren.
			$updatedRecord=array();
			$notUpdatedRecord=array();
			
			if(!empty($priceInDatabase))
			{
				//Uppdaterar Fältet Betald fråpn 0 till 1 för alla som ocr och pris stämmer.
				foreach($priceInDatabase as $row)
				{
					$result=$this->admin_payed_invoice->UpdateToPayed($row['ocrNumber']);
					if($result==TRUE)
					{
						array_push($updatedRecord,$row);
					}
					else
					{
						array_push($notUpdatedRecord,$row);
					}
				}
				$data['updatedRecord']=$updatedRecord;
				$data['notUpdatedRecord']=$notUpdatedRecord;
		
			}
			else
			{
				$message="Det finns fakturor som passar med fakturor i databasen men priset stämmer inte";
				$data['message']=$message;
			}
			
			

		}
		else
		{
			$message='Inga av fakturorna matchar de i databasen';
			$data['message']=$message;
		}
		return $data;		
	}
	
	
	
	
	//kollar vilka rader som index som har ocr och betalning.
	//returnerar en array med ocr och pris.
	private function _checkIfOcrAndPrice($dataArray)
	{	
		$ocrNumber="";
		$amount=0;
		$returnArray=array();
		
		foreach($dataArray as $row)
		{
			
			if($row['trans']=='20')
			{	
				$ocrNumber=substr($row['data'],10,25);
				$amount=substr($row['data'],35,18);
				$amount=$this->_convertToPrice($amount);
				$ocrNumber=$this->_convertToOcr($ocrNumber);
				$array=array('ocrNumber'=>$ocrNumber,
							'amount'=>$amount);
				array_push($returnArray,$array);
			}
		}
		
		return $returnArray;
		
	}
	
	//Rensar raden så att priset visas i rätt format
	private function _convertToPrice($price)
	{
		if(strlen($price)!=0)
		{
			$startpos=0;
			$beforeComma=0;
			$afterComma=0;
			for($i=0;$i<=strlen($price)-1;$i++)
			{
				if($price[$i]>0)
				{
				$startpos=$i;
				break;
				}
			}
			$beforeComma=substr($price,$startpos,strlen($price)-$startpos-2);
			$afterComma=substr($price,strlen($price)-2,2);
			$newPrice=$beforeComma.','.$afterComma;		
			
			return $newPrice;
		}
		else
		return 0;
	}
	
	//Tar bort täcken som inte behöver vara med.
	private function _convertToOcr($ocrNumber)
	{
		if(strlen($ocrNumber)!=0)
		{
			$startPos=0;
			for($i=0;$i<=strlen($ocrNumber)-1;$i++)
			{
				if(is_numeric($ocrNumber[$i]))
				{
					$startPos=$i;
					break;
				}
				
			}
			$newOcr=substr($ocrNumber,$startPos,strlen($ocrNumber)-$startPos);
			return $newOcr;
		}
		else
		return 0;		
	}
}
?>